


// #include "dev_module.h"



#ifndef __DEV_MODULE_H__
#define __DEV_MODULE_H__

#include "dev_manager.h"
#include "stdint.h"
#include <stdint.h>


#define  IOT_ID_NAME_STR_LEN (32U)


#define  IOT_ID_TABLE_MAX (256U)   ////该宏定义必须 大于或者等于 所有 xxx_iot_id_table 的最大值 battery_index_end



#define   pb_65H_read_type_0_iot_id_MAX  (16)  //一次读取的最大iot_id 数量



// typedef struct{

//     char soft_ver[33];
//     char hard_ver[33];
//     char product_model[33];     //0x0803	产品型号

//     char production_info[33];   //生产信息----生产日期，生产批次等信息
//     char manufacturer[33];      //0x0805	厂家信息- 最大32字节 生产商名称信息----manufacturer--factory--producer---

// } dev_attr_com_info_t;



typedef struct __iot_id_value__ {
    uint32_t iot_id;
    int64_t value;
} iot_id_value_st;





typedef struct{

    char soft_ver[IOT_ID_NAME_STR_LEN];
    char hard_ver[IOT_ID_NAME_STR_LEN];
    char product_model[IOT_ID_NAME_STR_LEN];     //0x0803	产品型号

    char production_info[IOT_ID_NAME_STR_LEN];   //生产信息----生产日期，生产批次等信息
    char manufacturer[IOT_ID_NAME_STR_LEN];      //0x0805	厂家信息- 最大32字节 生产商名称信息----manufacturer--factory--producer---

} dev_attr_com_info_t;


typedef struct{
    uint16_t key;
    char name[IOT_ID_NAME_STR_LEN];
    //uint16_t value; //
} dev_attr_key_name_t;



/**
 * @brief 
 * 
 */
void  dev_module_param_init(void);



/**
 * @brief 
 * @param node_type //节点设备码 参考上行协议文档的附录A  ---与62H命令网络拓扑里面的-子设备类型sub_type 一样
 * @param out 
 */
void  dev_module_attr_get( uint16_t sub_uid, void* out);  ////liquid_attr_t

uint8_t  dev_module_get_run_data_len( uint16_t node_type )  ;
uint8_t  dev_module_get_config_data_len( uint16_t node_type ) ; 


uint16_t*  dev_module_get_config_table( uint16_t node_type )  ;


/**
 * @brief  //按类型读取  
 * 
 * @param attr_id 
 * @param attr_out 
 * @return attr_cnt
 */
uint16_t  dev_module_read_attr( uint16_t index, dev_read_type_e read_type,void* attr_out ) ;
//uint16_t  dev_module_read_attr( uint16_t sub_uid,dev_read_type_e read_type, void* attr_out) ;

    

/**
 * @brief 
 * 
 * @param attr_id 
 * @param attr_out 
 */
//void  dev_module_get_attr( uint16_t sub_uid,uint16_t attr_id, void* attr_out);   //IotModel
void  dev_module_get_attr( uint16_t index,uint16_t attr_id, void* attr_out) ; 



/**
 * @brief ////读取指定测量点
 * @param node_index 
 * @param attr_id 
 * @param attr_out 
 */
void  dev_module_get_attr_with_node_index( uint8_t index,uint16_t attr_id, void* attr_out) ;



/**
 * @brief ////读取指定测量点
 * @param node_index
 * @param attr_index 
 * @param attr_out 
 */
void  dev_module_get_attr_with_node_attr_index( uint8_t node_index,uint16_t attr_index, void* attr_out) ;


/**
 * @brief ////读取运行时数据
 * @param node_index
 * @param attr_out 
 * @return 返回iot_id 属性的个数 
 */
uint16_t  dev_module_get_attr_run_data( uint8_t node_index, void* attr_out) ;


/**
 * @brief 
 * 
 * @param attr_in 
 * @return uint8_t 
 */
uint8_t  dev_module_set_attr( uint16_t sub_uid,void* attr_in);   //IotModel

uint8_t  dev_module_set_attr_with_index( uint8_t index,void* attr_in);   


uint8_t  dev_module_add_obj(uint8_t idx,uint8_t channel,uint16_t sub_mac,uint16_t node_type) ;




// 上行命令 65H(7.3.3.1 读取子设备属性) 读取类型(read_type) 取值为0(读取指定测量点)时 缓存数据的接口函数
void  dev_module_65H_read_type_0_set( uint16_t index,uint32_t iot_id, int64_t value)   ; 
void  dev_module_65H_read_type_0_get( uint16_t index,uint16_t attr_id, void* attr_out ) ; 


#endif




